package com.stars.easyms.alarm.properties;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <p>className: EasyMsAlarmProperties</p>
 * <p>description: 告警属性配置类</p>
 *
 * @author guoguifang
 * @version 1.6.1
 * @date 2020/8/22 10:35 上午
 */
@Data
@ConfigurationProperties(prefix = EasyMsAlarmProperties.ALARM_PREFIX)
public class EasyMsAlarmProperties {

    public static final String ALARM_PREFIX = "spring.alarm";

    /**
     * 是否启用告警，默认为false
     */
    private boolean enabled;

    private Elk elk = new Elk();

    private Email email = new Email();

    private Sms sms = new Sms();

    private WeChat weChat = new WeChat();

    private DingTalk dingTalk = new DingTalk();

    /**
     * <p>className: Email</p>
     * <p>description: 邮件参数配置</p>
     *
     * @author caotieshuan
     * @version 1.5.0
     * @date 2019-12-18 16:37
     */
    @Data
    public static class Email {

        /**
         * 是否激活
         */
        private boolean enabled;

        /**
         * 邮件服务器地址，如：smtp.163.com
         */
        private String host;

        /**
         * 端口，如：25
         */
        private String port;

        /**
         * ssl 端口
         */
        private String sslPort;

        /**
         * 发送邮件的帐号
         */
        private String fromUser;

        /**
         * 发送邮件的token
         */
        private String token;

        /**
         * 发给谁,多个以逗号隔开，如：cts@136.com,7552456@qq.com
         */
        private String toUser;
    }

    /**
     * <p>className: Sms</p>
     * <p>description:短信参数配置</p>
     *
     * @author caotieshuan
     * @version 1.5.0
     * @date 2019-12-18 16:37
     */
    @Data
    public static class Sms {

        /**
         * 是否激活
         */
        private boolean enabled;

        /**
         * 请求发送地址
         */
        private String postUrl;

        /**
         * 密钥
         */
        private String key;

        /**
         * 发给谁,多个以逗号隔开，如：13811121212
         */
        private String toUser;
    }

    /**
     * <p>className: WeChat</p>
     * <p>description: 企业微信参数配置</p>
     *
     * @author caotieshuan
     * @version 1.5.0
     * @date 2019-12-18 16:37
     */
    @Data
    public static class WeChat {

        /**
         * 是否激活
         */
        private boolean enabled;

        /**
         * 企业微信发送地址,多个以逗号隔开，如：https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=b3fd73ea-d226-4866-84f2-756bac9512bb
         */
        private String robotUrl;
    }

    /**
     * <p>className: DingTalk</p>
     * <p>description: 钉钉属性参数配置类</p>
     *
     * @author guoguifang
     * @version 1.6.1
     * @date 2020/8/22 1:44 下午
     */
    @Data
    public static class DingTalk {

        /**
         * 是否激活
         */
        private boolean enabled;

        /**
         * 默认机器人的地址
         */
        private String robotUrl;

        /**
         * 秘钥
         */
        private String robotSecret;

        /**
         * 若有多个机器人时使用
         */
        private List<DingTalkRobotDefinition> robots = new ArrayList<>();

        @Data
        public static class DingTalkRobotDefinition {

            /**
             * 机器人的ID，用来区分不同的机器人，可以向指定相应ID的机器人发送消息
             */
            private String id;

            /**
             * 机器人的地址，需要完整路径，包括access_token
             */
            private String url;

            /**
             * 秘钥
             */
            private String secret;
        }
    }

    /**
     * <p>className: Elk</p>
     * <p>description: Elk相关配置类</p>
     *
     * @author guoguifang
     * @version 1.6.1
     * @date 2020/8/24 5:57 下午
     */
    @Data
    public static class Elk {

        /**
         * elk-kibana地址，根据elk-kibana地址自动链接到elk查询
         */
        private String kibanaUrl;

        /**
         * 展示哪些列
         */
        private String columns;

        /**
         * 全局index，用于自动查询全链路日志
         */
        private String globalIndex;

        /**
         * 本系统的index，用于自动查询本系统日志
         */
        private String index;

        /**
         * 当使用告警微服务时，统一的所有需要告警的serviceId对应的index
         */
        private Map<String, String> indexs = new HashMap<>(32);

    }
}
